home *** CD-ROM | disk | FTP | other *** search
/ QRZ! Ham Radio 8 / QRZ Ham Radio Callsign Database - Volume 8.iso / pc / files / dsp / srffttar.z / srffttar / SRFFT / fftsubs.c < prev    next >
C/C++ Source or Header  |  1991-08-26  |  2KB  |  139 lines

  1. /* ------------------------- fftsubs.c -------------------------------- */
  2. /*                                    */
  3. /* Author:    Eyal Lebedinsky                        */
  4. /* Date:    May 1990                        */
  5. /* Version:    9 June 1991                        */
  6. /*                                    */
  7. /* called from the output of fftgf at run time                */
  8. /*                                    */
  9. /* This program is released into the public domain.            */
  10. /*                                    */
  11. /*----------------------------------------------------------------------*/
  12.  
  13. #define mulf(x,y) (((long)(x) * (long)(y)) >> 16)
  14. #define STATIC
  15.  
  16. extern short x[], qf[];
  17.  
  18. STATIC void
  19. _fft1 (i)
  20. int    i;
  21. {
  22.     x[i] >>= 1;
  23. }
  24.  
  25. STATIC void
  26. _fft2 (i0, i1)
  27. int    i0, i1;
  28. {
  29.     register short    t0, t1;
  30.  
  31.     t0 = x[i0] >> 1;
  32.     t1 = x[i1] >> 1;
  33.     x[i0] = t0 + t1;
  34.     x[i1] = t0 - t1;
  35. }
  36.  
  37. STATIC void
  38. _fft3 (i1, i3, i4)
  39. int    i1, i3, i4;
  40. {
  41.     register short    tt, t1, t3, t4;
  42.  
  43.     t1 = x[i1] >> 1;
  44.     t3 = x[i3] >> 1;
  45.     t4 = x[i4] >> 1;
  46.     tt    = (t4 + t3) >> 1;
  47.     x[i4] = (t4 - t3) >> 1;
  48.     x[i3] =  t1 - tt;
  49.     x[i1] =  t1 + tt;
  50. }
  51.  
  52. STATIC void
  53. _fft4 (i1, i2, i3, i4, cc1)
  54. int    i1, i2, i3, i4, cc1;
  55. {
  56.     register short    t1, t2, t3, t4, tt1, tt2;
  57.  
  58.     t1 = x[i1] >> 2;
  59.     t2 = x[i2] >> 1;
  60.     t3 = mulf (x[i3], cc1);
  61.     t4 = mulf (x[i4], cc1);
  62.     tt1 = t3 + t4;
  63.     tt2 = t3 - t4;
  64.     x[i4] =  t2 - tt1;
  65.     x[i3] = -t2 - tt1;
  66.     x[i2] =  t1 - tt2;
  67.     x[i1] =  t1 + tt2;
  68. }
  69.  
  70. STATIC void
  71. _fft5 (i1, i2, i3, i4, i5, i6, i7, i8, sm1, sp1, cc1, sm3, sp3, cc3, ind)
  72. int    i1, i2, i3, i4, i5, i6, i7, i8, sm1, sp1, cc1, sm3, sp3, cc3, ind;
  73. {
  74.     register short    t1, t2, t3, t4, t5, t6;
  75.  
  76.     t5 = x[i7];
  77.     t1 = mulf (t5, sm1);
  78.     t6 = x[i3];
  79.     if (ind)
  80.         t6 >>= 1;
  81.     t5 += t6;
  82.     t2 = mulf (t6, sp1);
  83.     t5 = mulf (t5, cc1);
  84.     t1 += t5;
  85.     t2 += t5;
  86.  
  87.     t5 = x[i8];
  88.     t3 = mulf (t5, sm3);
  89.     t6 = x[i4];
  90.     if (ind)
  91.         t6 >>= 1;
  92.     t5 += t6;
  93.     t4 = mulf (t6, sp3);
  94.     t5 = mulf (t5, cc3);
  95.     t3 += t5;
  96.     t4 += t5;
  97.  
  98.     t5    = t3 - t1;
  99.     t6    =  x[i2] >> 1;
  100.     x[i7] = -t6 + t5;
  101.     x[i4] =  t6 + t5;
  102.     t5    = t2 + t4;
  103.     t6    =  x[i6] >> 1;
  104.     x[i3] = -t6 + t5;
  105.     x[i8] =  t6 + t5;
  106.     t5    = t1 + t3;
  107.     t6    =  x[i1] >> 1;
  108.     x[i6] =  t6 - t5;
  109.     x[i1] =  t6 + t5;
  110.     t5    = t2 - t4;
  111.     t6    =  x[i5] >> 1;
  112.     x[i5] =  t6 - t5;
  113.     x[i2] =  t6 + t5;
  114. }
  115.  
  116. STATIC void
  117. _fft7 (i1, i2)
  118. int    i1, i2;
  119. {
  120.     register long    t1;
  121.  
  122.     t1 = x[i2] << 1;
  123.     t1 = t1 * t1;
  124.     qf[i1] = t1 >> 16;
  125. }
  126.  
  127. STATIC void
  128. _fft8 (i1, i2, i3)
  129. int    i1, i2, i3;
  130. {
  131.     register long    t1, t2;
  132.  
  133.     t1 = x[i2] << 1;
  134.     t1 = t1 * t1;
  135.     t2 = x[i3] << 1;
  136.     t2 = t2 * t2;
  137.     qf[i1] = (t1 + t2) >> 16;
  138. }
  139.